import { createRouter, createWebHistory } from 'vue-router'

import store from '@/store'

import NProgress from 'nprogress' // progress bar
import 'nprogress/nprogress.css' // progress bar style
NProgress.configure({ showSpinner: false }) // NProgress Configuration

import routes from './config'

const router = createRouter({
  history: createWebHistory(process.env.BASE_URL),
  scrollBehavior(to, from, savedPosition) {
    // 始终滚动到顶部
    return new Promise((resolve, reject) => {
      setTimeout(() => {
        resolve({
          left: 0,
          top: 0
        })
      }, 500)
    })
    
    // return {
    //   top: 0
    // }
  },
  routes
})


router.beforeEach(async(to, from, next) => {

  NProgress.start()

  const hasToken = $g.getToken()

  if(hasToken){     // 判断 是否有 token  如果 有 token
    if(to.path === '/login'){     // 如果有 token  则   跳转到 首页
      next({ path: '/' })
      window.clearScreenLoading() // 清除  首屏 加载 动画
      NProgress.done()
    }else{
      const hasRole = store.state.roleList.length > 0  //  是否 有 橘色，用户必须配置角色 -- 一般刷新页面走这个判断
      if(hasRole){    // 如果有角色 说明是 普通 跳转
        next()
      }else{

        const res = await store.dispatch('getBasicData')        // 获取 用户 的  基础 数据

        const { buttonPermissionList, menuList, roleList } = res.body || {}

        store.commit('setUserMsg', res.body)    //设置 用户 基础 数据
        store.commit('setButtonPermission', buttonPermissionList)
        store.commit('setMenuList', menuList)
        store.commit('setRoleList', roleList)

        window.clearScreenLoading() // 清除  首屏 加载 动画

        next()
      }
    }
  }else{
    if(to.path === '/login'){
      window.clearScreenLoading() // 清除  首屏 加载 动画
      next()
    }else{
      window.clearScreenLoading() // 清除  首屏 加载 动画
      next('/login')
    }
  }



})


router.afterEach(() => {
  // finish progress bar
  NProgress.done()
})

export default router
